# -*- coding: utf-8 -*-
import logging
import scrapy


class MydomainSpider(scrapy.Spider):
    name = 'mydomain'
    allowed_domains = ['mydomain.com']  #可选。包含了spider允许爬取的域名(domain)列表(list)。 当 OffsiteMiddleware 启用时， 域名不在列表中的URL不会被跟进。
    start_urls = ['http://mydomain.com/']

    def parse(self, response):
        """
        当response没有指定回调函数时，该方法是Scrapy处理下载的response的默认方法。

        parse 负责处理response并返回处理的数据以及(/或)跟进的URL。 Spider 对其他的Request的回调函数也有相同的要求。

        该方法及其他的Request回调函数必须返回一个包含 Request 及(或) Item 的可迭代的对象。
        :param response: 
        :return: 
        """
        pass

    def start_requests(self):
        """
        该方法必须返回一个可迭代对象(iterable)。该对象包含了spider用于爬取的第一个Request。

        当spider启动爬取并且未制定URL时，该方法被调用。 当指定了URL时，make_requests_from_url() 将被调用来创建Request对象。 该方法仅仅会被Scrapy调用一次，因此您可以将其实现为生成器。

        该方法的默认实现是使用 start_urls 的url生成Request。

        如果您想要修改最初爬取某个网站的Request对象，您可以重写(override)该方法。 例如，如果您需要在启动时以POST登录某个网站，你可以这么写:
        :return: 
        """
        return [scrapy.FormRequest("http://www.example.com/login",
                                   formdata={'user': 'john', 'pass': 'secret'},
                                   callback=self.logged_in)]


    def logged_in(self,response):
        # here you would extract links to follow and return Requests for
        # each of them, with another callback
        pass

    def make_requests_from_url(self, url):
        """
        该方法接受一个URL并返回用于爬取的 Request 对象。 该方法在初始化request时被 start_requests() 调用，也被用于转化url为request。

        默认未被复写(overridden)的情况下，该方法返回的Request对象中， parse() 作为回调函数，dont_filter参数也被设置为开启。
        :param url: 
        :return: 
        """
        pass

    def log(self, message, level=logging.DEBUG, **kw):
        """
        使用 scrapy.log.msg() 方法记录(log)message。 log中自动带上该spider的 name 属性。 更多
        :param message: 
        :param level: 
        :param kw: 
        :return: 
        """
        pass

    def close(spider, reason):
        """
        当spider关闭时，该函数被调用。 该方法提供了一个替代调用signals.connect()来监听 spider_closed 信号的快捷方式。
        :param reason: 
        :return: 
        """
        pass


